import { NextResponse } from 'next/server'
import type { NextRequest } from 'next/server'
import { verifyToken } from '@/lib/authUtils'

// 需要保护的路径
const protectedPaths = [
  '/copy',
  '/cover',
  '/dashboard', 
  '/music',
  '/notion',
  '/pptedit',
  '/progress',
  '/read',
  '/scripts',
  '/subtitle',
  '/topics',
  '/user'
]

// 公开路径（不需要登录）
const publicPaths = [
  '/',
  '/login',
  '/register'
]

export async function middleware(request: NextRequest) {
  const { pathname } = request.nextUrl
  
  console.log('Middleware checking path:', pathname)
  
  // 检查是否是受保护的路径
  const isProtectedPath = protectedPaths.some(path => 
    pathname.startsWith(path)
  )
  
  console.log('Is protected path:', isProtectedPath)
  
  // 如果不是受保护的路径，直接通过
  if (!isProtectedPath) {
    return NextResponse.next()
  }
  
  // 获取 token
  const token = request.cookies.get('token')?.value || 
                request.headers.get('authorization')?.replace('Bearer ', '')
  
  console.log('Token found:', !!token)
  
  // 如果没有 token，重定向到登录页
  if (!token) {
    const loginUrl = new URL('/login', request.url)
    loginUrl.searchParams.set('redirect', pathname)
    return NextResponse.redirect(loginUrl)
  }
  
  // 验证 token
  try {
    const decoded = await verifyToken(token)
    if (!decoded) {
      const loginUrl = new URL('/login', request.url)
      loginUrl.searchParams.set('redirect', pathname)
      return NextResponse.redirect(loginUrl)
    }
    
    // Token 有效，继续请求
    return NextResponse.next()
  } catch (error) {
    // Token 无效，重定向到登录页
    const loginUrl = new URL('/login', request.url)
    loginUrl.searchParams.set('redirect', pathname)
    return NextResponse.redirect(loginUrl)
  }
}

// 配置 middleware 匹配的路径
export const config = {
  matcher: [
    /*
     * 匹配所有路径除了：
     * - api 路由（已有自己的权限验证）
     * - _next/static（静态文件）
     * - _next/image（图片优化）
     * - favicon.ico
     * - 公共资源
     */
    '/((?!api|_next/static|_next/image|favicon.ico|images|fonts|uploads).*)',
  ],
}